{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Understanding the LSTM and GRU layers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "SimpleRNN isn’t the only recurrent layer available in Keras.\n",
    "\n",
    "There are two others: LSTM(Long Short-Term Memory) and GRU(Gated Recurrent Unit).\n",
    "\n",
    "Recurrent Neural Network (RNN) has a problem of vanishing gradient problem.\n",
    "Mean it can remember back but can't remember a lot of steps back.\n",
    "\n",
    "The LSTM and GRU layers are designed to solve this problem.\n",
    "\n",
    "Long Short-Term Memory (LSTM) adds a way to carry information across many timesteps.\n",
    "Mean it can remember for longer then Rnn.\n",
    "\n",
    "what LSTM does: it saves information for later,\n",
    "thus preventing older signals from gradually vanishing during processing."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# SimpleRNN cell\n",
    "\n",
    "y = activation(dot(state_t, U) + dot(input_t, W) + b)\n",
    "\n",
    "# Pseudocode details of the LSTM architecture (1/2)\n",
    "\n",
    "output_t = activation(dot(state_t, Uo) + dot(input_t, Wo) + dot(C_t, Vo) + bo)\n",
    "\n",
    "i_t = activation(dot(state_t, Ui) + dot(input_t, Wi) + bi)\n",
    "\n",
    "f_t = activation(dot(state_t, Uf) + dot(input_t, Wf) + bf)\n",
    "\n",
    "k_t = activation(dot(state_t, Uk) + dot(input_t, Wk) + bk)\n",
    "\n",
    "You obtain the new carry state (the next c_t) by combining i_t, f_t, and k_t.\n",
    "\n",
    "# Listing 6.26 Pseudocode details of the LSTM architecture (2/2)\n",
    "\n",
    "c_t+1 = i_t * k_t + c_t * f_t\n",
    "\n",
    "#### as a human, it shouldn’t be your job to understand it. Just keep in mind what the LSTM cell is meant to do: allow past information to be reinjected at a later time, thus fighting the vanishing-gradient problem. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Using LSTM on IMDB Movie Review Classification Problem\n",
    " Enough with the examples lets implement the LSTM (Long Short-Term Memory)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "25000 train sequences\n",
      "25000 test sequences\n"
     ]
    }
   ],
   "source": [
    "# Preparing data \n",
    "\n",
    "from tensorflow.keras.datasets import imdb  # loading IMdb from keras\n",
    "max_features = 10000                        # Max word\n",
    "\n",
    "(input_train, y_train), (input_test, y_test) = imdb.load_data(num_words=max_features)\n",
    "\n",
    "print(len(input_train), 'train sequences')\n",
    "print(len(input_test), 'test sequences')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input_train shape: (25000, 500)\n",
      "input_test shape: (25000, 500)\n"
     ]
    }
   ],
   "source": [
    "from tensorflow.keras.preprocessing import sequence\n",
    "maxlen = 500                # lenth of sentence\n",
    "\n",
    "input_train = sequence.pad_sequences(input_train, maxlen=maxlen)\n",
    "input_test = sequence.pad_sequences(input_test, maxlen=maxlen)\n",
    "\n",
    "print('input_train shape:', input_train.shape)\n",
    "print('input_test shape:', input_test.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Using the LSTM layer in Keras"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 20000 samples, validate on 5000 samples\n",
      "Epoch 1/10\n",
      "20000/20000 [==============================] - 12s 580us/sample - loss: 0.5151 - acc: 0.7524 - val_loss: 0.3457 - val_acc: 0.8634\n",
      "Epoch 2/10\n",
      "20000/20000 [==============================] - 8s 381us/sample - loss: 0.3013 - acc: 0.8834 - val_loss: 0.3197 - val_acc: 0.8730\n",
      "Epoch 3/10\n",
      "20000/20000 [==============================] - 8s 379us/sample - loss: 0.2338 - acc: 0.9111 - val_loss: 0.3229 - val_acc: 0.8680\n",
      "Epoch 4/10\n",
      "20000/20000 [==============================] - 8s 379us/sample - loss: 0.1993 - acc: 0.9258 - val_loss: 0.3041 - val_acc: 0.8714\n",
      "Epoch 5/10\n",
      "20000/20000 [==============================] - 8s 381us/sample - loss: 0.1776 - acc: 0.9377 - val_loss: 0.2988 - val_acc: 0.8716\n",
      "Epoch 6/10\n",
      "20000/20000 [==============================] - 8s 391us/sample - loss: 0.1579 - acc: 0.9458 - val_loss: 0.2999 - val_acc: 0.8848\n",
      "Epoch 7/10\n",
      "20000/20000 [==============================] - 8s 393us/sample - loss: 0.1456 - acc: 0.9488 - val_loss: 0.3792 - val_acc: 0.8786\n",
      "Epoch 8/10\n",
      "20000/20000 [==============================] - 8s 394us/sample - loss: 0.1300 - acc: 0.9548 - val_loss: 0.4362 - val_acc: 0.8450\n",
      "Epoch 9/10\n",
      "20000/20000 [==============================] - 8s 393us/sample - loss: 0.1224 - acc: 0.9582 - val_loss: 0.3304 - val_acc: 0.8740\n",
      "Epoch 10/10\n",
      "20000/20000 [==============================] - 8s 390us/sample - loss: 0.1104 - acc: 0.9625 - val_loss: 0.5648 - val_acc: 0.8494\n"
     ]
    }
   ],
   "source": [
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import Embedding  #, SimpleRNN\n",
    "from tensorflow.keras.layers import Dense\n",
    "from tensorflow.keras.layers import LSTM\n",
    "\n",
    "\n",
    "model = Sequential()\n",
    "model.add(Embedding(max_features, 32))\n",
    "model.add(LSTM(32))\n",
    "model.add(Dense(1, activation='sigmoid'))\n",
    "\n",
    "model.compile(optimizer='rmsprop',\n",
    "                loss='binary_crossentropy',\n",
    "                metrics=['acc'])\n",
    "\n",
    "history = model.fit(input_train, y_train,\n",
    "                    epochs=10,\n",
    "                    batch_size=128,\n",
    "                    validation_split=0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEICAYAAABRSj9aAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXxV1bn/8c9DACMzAloFIagUhUAAY9QLKkUZtAqKVkFooRapdWjr0F6nVqtFvVYc+tPbK7UOaAqlWpW2DnXAsVUJgihaBAUxihgQEQkWA8/vj7UTTkKGEzjJOdl836/XeZ097+fskzxn7bXXXtvcHRERia9m6Q5AREQalhK9iEjMKdGLiMScEr2ISMwp0YuIxJwSvYhIzCnR74bMLMvMvjSz7qlcNp3M7CAzS3lbYTM7zsxWJowvNbOjkll2J/Z1l5ldvrPri9SkeboDkLqZ2ZcJo62A/wBbo/Efunthfbbn7luBNqlednfg7r1TsR0zmwJMdPehCduekopti1SlRN8EuHtFoo1KjFPc/emaljez5u5e1hixidRFf4/pp6qbGDCzX5vZn8xslpltBCaa2ZFm9oqZfW5mq83st2bWIlq+uZm5meVE4w9E8x83s41m9i8z61nfZaP5x5vZu2a2wcz+n5m9bGaTa4g7mRh/aGbLzWy9mf02Yd0sM7vFzNaZ2XvAqFqOz5VmNrvKtDvM7OZoeIqZvRN9nvei0nZN2yo2s6HRcCszuz+KbQlwaDX7fT/a7hIzGx1N7wfcDhwVVYutTTi2Vyesf0702deZ2SNmtm8yx6Y+x7k8HjN72sw+M7NPzOznCfv5RXRMvjCzIjPbr7pqMjN7qfx7jo7nC9F+PgOuNLNeZjYv+ixro+PWPmH9HtFnLInm32Zm2VHMhyQst6+ZlZpZp5o+r1TD3fVqQi9gJXBclWm/BrYAJxF+vPcEDgMOJ5y1HQC8C5wfLd8ccCAnGn8AWAvkAy2APwEP7MSyewMbgTHRvIuAr4HJNXyWZGJ8FGgP5ACflX924HxgCdAN6AS8EP6cq93PAcCXQOuEbX8K5EfjJ0XLGDAM2Az0j+YdB6xM2FYxMDQavgl4DugI9ADerrLs6cC+0XdyZhTDPtG8KcBzVeJ8ALg6Gh4RxTgAyAb+F3g2mWNTz+PcHlgD/ATYA2gHFETzLgPeAHpFn2EAsBdwUNVjDbxU/j1Hn60M+BGQRfh7/CZwLNAy+jt5Gbgp4fO8FR3P1tHyg6N5M4BpCfu5GHg43f+HTe2V9gD0qucXVnOif7aO9S4B/hwNV5e8/y9h2dHAWzux7FnAiwnzDFhNDYk+yRiPSJj/F+CSaPgFQhVW+bwTqiafKtt+BTgzGj4eeLeWZf8GnBcN15boVyV+F8C5ictWs923gG9Hw3Ul+vuA6xLmtSNcl+lW17Gp53H+LlBUw3LvlcdbZXoyif79OmI4DZgfDR8FfAJkVbPcYGAFYNH4ImBsqv+v4v5S1U18fJg4YmYHm9nfo1PxL4BrgM61rP9JwnAptV+ArWnZ/RLj8PCfWVzTRpKMMal9AR/UEi/AH4Hx0fCZQMUFbDM70cxejaouPieUpms7VuX2rS0GM5tsZm9E1Q+fAwcnuV0In69ie+7+BbAe6JqwTFLfWR3HeX9geQ0x7E9I9juj6t/jN8xsjpl9FMVwb5UYVnq48F+Ju79MODsYYma5QHfg7zsZ025LiT4+qjYtvJNQgjzI3dsBvySUsBvSakKJEwAzMyonpqp2JcbVhARRrq7mn38CjjOzboSqpT9GMe4JPAhcT6hW6QD8I8k4PqkpBjM7APgdofqiU7Tdfydst66moB8TqoPKt9eWUEX0URJxVVXbcf4QOLCG9WqatymKqVXCtG9UWabq5/sfQmuxflEMk6vE0MPMsmqIYyYwkXD2Mcfd/1PDclIDJfr4agtsADZFF7N+2Aj7/BswyMxOMrPmhHrfLg0U4xzgp2bWNbow99+1LezuawjVC/cAS919WTRrD0K9cQmw1cxOJNQlJxvD5WbWwcJ9BucnzGtDSHYlhN+8KYQSfbk1QLfEi6JVzAJ+YGb9zWwPwg/Ri+5e4xlSLWo7znOB7mZ2vpm1NLN2ZlYQzbsL+LWZHWjBADPbi/AD9wnhon+WmU0l4Ueplhg2ARvMbH9C9VG5fwHrgOssXODe08wGJ8y/n1DVcyYh6Us9KdHH18XAJMLF0TsJJdoGFSXTM4CbCf+4BwILCSW5VMf4O+AZ4E1gPqFUXpc/Eurc/5gQ8+fAhcDDhAuapxF+sJJxFeHMYiXwOAlJyN0XA78FXouWORh4NWHdp4BlwBozS6yCKV//CUIVy8PR+t2BCUnGVVWNx9ndNwDDgVMJF3/fBY6JZv8GeIRwnL8gXBjNjqrkzgYuJ1yYP6jKZ6vOVUAB4QdnLvBQQgxlwInAIYTS/SrC91A+fyXhe97i7v+s52cXtl/gEEm56FT8Y+A0d38x3fFI02VmMwkXeK9OdyxNkW6YkpQys1GEU/GvCM3zygilWpGdEl3vGAP0S3csTZWqbiTVhgDvE07pRwEn6+KZ7Cwzu57Qlv86d1+V7niaKlXdiIjEnEr0IiIxl3F19J07d/acnJx0hyEi0qQsWLBgrbtX25w54xJ9Tk4ORUVF6Q5DRKRJMbMa7w5X1Y2ISMwp0YuIxJwSvYhIzGVcHX11vv76a4qLi/nqq6/SHYrUIjs7m27dutGiRU3dt4hIOjSJRF9cXEzbtm3JyckhdIgomcbdWbduHcXFxfTs2bPuFUSk0TSJqpuvvvqKTp06KclnMDOjU6dOOusS2QmFhZCTA82ahffCwrrWqJ8mUaIHlOSbAH1HIvVXWAhTp0JpaRj/4IMwDjBhZ/srraJJlOhFROLqiiu2J/lypaVheqoo0Sdh3bp1DBgwgAEDBvCNb3yDrl27Voxv2bIlqW18//vfZ+nSpbUuc8cdd1CY6nM2Ecloq2roqq2m6Tsjlok+1fVdnTp1YtGiRSxatIhzzjmHCy+8sGK8ZcuWQLgYuW3bthq3cc8999C7d+9a93PeeecxIVXnaiJSp4auG09G9xoeglnT9J0Ru0RfXt/1wQfgvr2+qyG+wOXLl5Obm8s555zDoEGDWL16NVOnTiU/P5++fftyzTXXVCw7ZMgQFi1aRFlZGR06dODSSy8lLy+PI488kk8//RSAK6+8kltvvbVi+UsvvZSCggJ69+7NP/8ZHqyzadMmTj31VPLy8hg/fjz5+fksWrRoh9iuuuoqDjvssIr4ynspfffddxk2bBh5eXkMGjSIlStXAnDdddfRr18/8vLyuCKV54wiGaoxc0Vtpk2DVq0qT2vVKkxPGXfPqNehhx7qVb399ts7TKtJjx7u4Wur/OrRI+lN1Oqqq67y3/zmN+7uvmzZMjczf+211yrmr1u3zt3dv/76ax8yZIgvWbLE3d0HDx7sCxcu9K+//toBf+yxx9zd/cILL/Trr7/e3d2vuOIKv+WWWyqW//nPf+7u7o8++qiPHDnS3d2vv/56P/fcc93dfdGiRd6sWTNfuHDhDnGWx7Ft2zYfN25cxf4GDRrkc+fOdXf3zZs3+6ZNm3zu3Lk+ZMgQLy0trbTuzqjPdyWSTg2dK+rjgQfCfs3C+wMP1H8bQJHXkFdjV6JvjPquRAceeCCHHXZYxfisWbMYNGgQgwYN4p133uHtt9/eYZ0999yT448/HoBDDz20olRd1dixY3dY5qWXXmLcuHEA5OXl0bdv32rXfeaZZygoKCAvL4/nn3+eJUuWsH79etauXctJJ50EhBucWrVqxdNPP81ZZ53FnnvuCcBee+1V/wMhUg+ZUGXS2LmiNhMmwMqVsG1beE91DW6TaV6ZrO7dwylYddMbQuvWrSuGly1bxm233cZrr71Ghw4dmDhxYrXtysvr9QGysrIoKyurdtt77LHHDst4Eg+KKS0t5fzzz+f111+na9euXHnllRVxVNcE0t3VNFIaTWM0J0xGY+eKdIpdib5R6rtq8MUXX9C2bVvatWvH6tWrefLJJ1O+jyFDhjBnzhwA3nzzzWrPGDZv3kyzZs3o3LkzGzdu5KGHHgKgY8eOdO7cmb/+9a9AuBGttLSUESNG8Ic//IHNmzcD8Nlnn6U8bpFyjdGcMBnpzBWNLXaJfsIEmDEDevQAs/A+Y0bjlBQGDRpEnz59yM3N5eyzz2bw4MEp38cFF1zARx99RP/+/Zk+fTq5ubm0b9++0jKdOnVi0qRJ5Obmcsopp3D44YdXzCssLGT69On079+fIUOGUFJSwoknnsioUaPIz89nwIAB3HLLLSmPW6RcplSZpDNXNLaMe2Zsfn6+V33wyDvvvMMhhxySpogyS1lZGWVlZWRnZ7Ns2TJGjBjBsmXLaN48M2rh9F1JXXJyqq8y6dEj1E/LzjGzBe6eX928pEr0ZjbKzJaa2XIzu7Sa+T3M7BkzW2xmz5lZt4R5W81sUfSau/MfQwC+/PJLBg8eTF5eHqeeeip33nlnxiR5kWTsTlUmmaLORG9mWcAdwPFAH2C8mfWpsthNwEx37w9cA1yfMG+zuw+IXqNTFPduq0OHDixYsIA33niDxYsXM2LEiHSHJE1Mulu87E5VJpkimaJgAbDc3d8HMLPZwBgg8SpgH+DCaHge8EgqgxSR1MiUFi8TJiixN6Zkqm66Ah8mjBdH0xK9AZwaDZ8CtDWzTtF4tpkVmdkrZnZydTsws6nRMkUlJSX1CF9E6iNTWrxI40om0VfXwLrqFdxLgGPMbCFwDPARUN44vHt0geBM4FYzO3CHjbnPcPd8d8/v0qVL8tGLNCHprjKBzGnxIo0rmaqbYmD/hPFuwMeJC7j7x8BYADNrA5zq7hsS5uHu75vZc8BA4L1djlykCcmUKpPd6SYh2S6ZEv18oJeZ9TSzlsA4oFLrGTPrbGbl27oMuDua3tHM9ihfBhhM5br9JmHo0KE73Px06623cu6559a6Xps2bQD4+OOPOe2002rcdtXmpFXdeuutlCacb59wwgl8/vnnyYQuGSJTqkzU4mX3VGeid/cy4HzgSeAdYI67LzGza8ysvBXNUGCpmb0L7AOU/9kcAhSZ2RuEi7Q3uHuTS/Tjx49n9uzZlabNnj2b8ePHJ7X+fvvtx4MPPrjT+6+a6B977DE6dOiw09uTxpcpVSZq8bKbqqm3s3S9drX3yoawdu1a79y5s3/11Vfu7r5ixQrff//9fdu2bb5x40YfNmyYDxw40HNzc/2RRx6pWK9169YVy/ft29fd3UtLS/2MM87wfv36+emnn+4FBQU+f/58d3c/55xz/NBDD/U+ffr4L3/5S3d3v+2227xFixaem5vrQ4cOdXf3Hj16eElJibu7T58+3fv27et9+/at6PlyxYoVfvDBB/uUKVO8T58+Pnz48IqeKRPNnTvXCwoKfMCAAX7sscf6J5984u7uGzdu9MmTJ3tubq7369fPH3zwQXd3f/zxx33gwIHev39/HzZsWLXHKt3fVabKpJ4SJZ6opffKJnenzU9/CtV0v75LBgyAqBv4anXq1ImCggKeeOIJxowZw+zZsznjjDMwM7Kzs3n44Ydp164da9eu5YgjjmD06NE1dhL2u9/9jlatWrF48WIWL17MoEGDKuZNmzaNvfbai61bt3LssceyePFifvzjH3PzzTczb948OnfuXGlbCxYs4J577uHVV1/F3Tn88MM55phj6NixI8uWLWPWrFn8/ve/5/TTT+ehhx5i4sSJldYfMmQIr7zyCmbGXXfdxY033sj06dO59tprad++PW+++SYA69evp6SkhLPPPpsXXniBnj17qj+cepo2rXIdPajKRBpP7Pq6aSiJ1TeJ1TbuzuWXX07//v057rjj+Oijj1izZk2N23nhhRcqEm7//v3p379/xbw5c+YwaNAgBg4cyJIlS6rtsCzRSy+9xCmnnELr1q1p06YNY8eO5cUXXwSgZ8+eDBgwAKi5K+Ti4mJGjhxJv379+M1vfsOSJUsAePrppznvvPMqluvYsSOvvPIKRx99ND179gTUlXF9qcpE0qnJlehrK3k3pJNPPpmLLrqI119/nc2bN1eUxAsLCykpKWHBggW0aNGCnJycarsmTlRdaX/FihXcdNNNzJ8/n44dOzJ58uQ6t+O19FNU3sUxhG6Oy3umTHTBBRdw0UUXMXr0aJ577jmuvvrqiu1WjbG6aU1FYWG46LlqVWhdMm1aehKsbhKSdFGJPklt2rRh6NChnHXWWZUuwm7YsIG9996bFi1aMG/ePD6oru1agqOPPrriAeBvvfUWixcvBkIXx61bt6Z9+/asWbOGxx9/vGKdtm3bsnHjxmq39cgjj1BaWsqmTZt4+OGHOeqoo5L+TBs2bKBr13Dv23333VcxfcSIEdx+++0V4+vXr+fII4/k+eefZ8WKFUDT6co4Ux4XJ5JOSvT1MH78eN54442KJzwBTJgwgaKiIvLz8yksLOTggw+udRs/+tGP+PLLL+nfvz833ngjBQUFQHha1MCBA+nbty9nnXVWpS6Op06dyvHHH8+3vvWtStsaNGgQkydPpqCggMMPP5wpU6YwcODApD/P1VdfzXe+8x2OOuqoSvX/V155JevXryc3N5e8vDzmzZtHly5dmDFjBmPHjiUvL48zzjgj6f2kU6Y0axRJJ3VTLCmVad9Vs2ahJF+VWXhsm0hc7HI3xSJNVU13fOpOUNmdKNFLrOlOUJEmlOgzrYpJdpSJ35GaNYo0keaV2dnZrFu3jk6dOjXZJn5x5+6sW7eO7OzsdIeyAzVrlN1dk0j03bp1o7i4GPVVn9mys7Pp1q1b3QuKSKNqEom+RYsWFXdkiohI/TSZOnoREdk5SvQiIjGnRC8NJhMenSciTaSOXpqeTHl0noioRC8NRH3MiGQOJXppEJny6DwRUaKXBqI+ZkQyhxK9NAj1MSOSOZTopUGojxmRzKFWN9Jg1MeMSGZQiV5EJOaU6EVEYk6JXkQk5pToRURiToleRCTmlOhFRGJOiT6G1GukiCRSO/qYUa+RIlKVSvQxo14jRaQqJfqYUa+RIlKVEn3MqNdIEalKiT5m1GukiFSlRB8z6jVSRKpSq5sYUq+RIpJIJXoRkZhTohcRibmkEr2ZjTKzpWa23MwurWZ+DzN7xswWm9lzZtYtYd4kM1sWvSalMngREalbnYnezLKAO4DjgT7AeDPrU2Wxm4CZ7t4fuAa4Plp3L+Aq4HCgALjKzDqmLnwREalLMiX6AmC5u7/v7luA2cCYKsv0AZ6JhuclzB8JPOXun7n7euApYNSuhy0iIslKJtF3BT5MGC+OpiV6Azg1Gj4FaGtmnZJcFzObamZFZlZUUlKSbOwiIpKEZBK9VTPNq4xfAhxjZguBY4CPgLIk18XdZ7h7vrvnd+nSJYmQREQkWcm0oy8G9k8Y7wZ8nLiAu38MjAUwszbAqe6+wcyKgaFV1n1uF+IVEZF6SqZEPx/oZWY9zawlMA6Ym7iAmXU2s/JtXQbcHQ0/CYwws47RRdgR0TQREWkkdSZ6dy8Dzick6HeAOe6+xMyuMbPR0WJDgaVm9i6wDzAtWvcz4FrCj8V84JpomoiINBJz36HKPK3y8/O9qKgo3WGIiDQpZrbA3fOrm6c7Y0VEYk6JXkQk5pToRURiToleRCTmlOhFRGJOiV5EJOaU6EVEYk6JPoUKCyEnB5o1C++FhemOSDLJl1/Cn/8Mf/sbrFwJ27alOyLZXeiZsSlSWAhTp0JpaRj/4IMwDnp+6+5s61aYNw9mzoSHHtr+9wHQpg307Qu5ueHVr19433vv8GB3kVTRnbEpkpMTkntVPXqE0pvsXpYsgfvvhwcegI8+gg4d4Iwzwo9+8+bw1lvw5pvb39eu3b5u5847Jv++faF9+/R9Hsl8td0ZqxJ9iqxaVb/pEj+ffgqzZ4fS+4IFkJUFJ5wAt94KJ54I2dnblz3yyB3XTUz+b70F994bqnvK7b//jj8ABx8Me+7ZKB9PmjAl+hTp3r36En337o0fizSer74Kde4zZ8Ljj0NZGRx6KNx2G4wbF6phkrH33jBsWHiVcw8FhfLEX/4j8MwzsGVLWKZZMzjooB1/AA46KJw5iIASfcpMm1a5jh6gVaswXeLFHf71r5Dc//Qn+Pxz2G8/uOgi+O53Q6JNBbNQ9dejB3z729unl5XB8uXbfwDKfwQeeWT7Bd6WLeGQQyon/9zcUPBQ/f/uR3X0KVRYCFdcEUph3buHJK8LsfGxYkWod585E957L/yQjx0L3/teKIlnZaU3vs2b4d//3vEH4MOEh3m2bRvq+wcMgMsvD9VBEg+11dEr0YvUYsOG0CRy5kx48cVQGv7Wt0JyHzs2JM5Mt2FDuDic+APw6qvhou9TT8E3v5nuCCUVlOhF6qGsDP7xj5DcH3001MP37g2TJoUztDhcd1m0CEaMCD9cTz4ZSvjStKnVjUgSFi0Kyf2Pf4Q1a6BTJ5gyJZTe8/PjVbc9YEA4Qxk+HIYOhb//HQYPTndU0lCU6GW3tnp1SOwzZ8LixdCiRWgKOWkSHH98uKgZV717w0svhWQ/fDg8/DCMHJnuqBpfaSl88gkccEC6I2k46gIhxdauDfWeb74JmzalOxqpTmkpzJoVEnm3bnDJJaEt+h13hMT/l7/AmDHxTvLluncPJfveveGkk+DBB9MdUeN6993QHLZXL7jsMvjPf9IdUcNQiX4Xbd4cSkVPPQVPPw0LF1aev+++oU3zgQeG98ThDh3SE/PuaNu2kNBmzgwXVzduDEnusstCk8jevdMdYfrsvXfopuHEE8PduzNmwA9+kO6oGt5jj8GZZ4b7Db7zHbjhhjBt5kzIy0t3dKmli7H1tHVrSOZPPx2S+8svh1JAixbwX/8VToGPOCKU7JcvD83wli8Pr9WrK2+rU6ftSb/qD0FT6e9k27bwWT/5ZPtr9erK4xs2hOXct78nDjfGvPL3Nm3CP/X3vgdHHx1uOJKgtBROPRWeeAKmTw/3BcSRO/zP/4TmpXl5ocoqJyfc+DZlCnz2GfzqV/CznzWtm87U6mYXvf/+9hL7s8+GPwSA/v3huOPC6+ijoXXr2rezaVPYVmLyLx9etapyb4Zt2tR8JtC1a8MnqE2bdkzY1SXxNWvCj19VbdrAN74RXh06hHibNQs/Xmbbh2ubtrPzaprWpw+cfHJo/y7V27IFJk4MZz1XXgnXXNM0ChzJ2rQJzjoL5swJZy93313572HtWjj33PD5jzgilO579UpfvPWhRF9P69aFhF5eal+xIkzv2nX7hathw0ISS5UtW0LnZ1XPAt57L/w4fP319mX32CNcOKruh6BHj3B2UZ2yMigpqT5hV52W2MdKuaws2Gef7Ql83323DydO22efkOiladq6Fc45B+66C84/P3TnEIczn5Urww/94sVw/fXw859X/yPmHvosOu+80LT2xhtD8s/0Y6BEX4evvgpVMOWl9tdfD192u3bh5pjyUnvv3ukp3WzdCsXFO54FlA8ndruQlRWS/UEHheqfxMReUhI+V1UdOlSfsKtO69w58//YJTXcQyK86aZQwr/77poLEE3Bs8/C6aeH/6VZs2DUqLrX+fjjcK3iiSfC///dd2f2ncRK9FVs2xbaTD/9dHi9+GJI9s2bh14FjzsulNoPOyzz6+jcQyKvrjpo7dqQ7GtL4vvso94PpXruoeR7xRUwenTo1yexB86mwD2ckVxySSioPfJI/api3MPF6YsvDrngt78NF+8zsTqrtkSPu2fU69BDD/WGsGKF++9/73766e6dOpVfunPPzXX/6U/d//Y3940bG2TXIk3aHXeE/5Vhw9y/+CLd0SRv82b3SZNC7GPG7Frsy5e7Dx4ctnXyye5r1qQszJQBiryGvJrh5dWdt3595Xr2994L0/fbL/QEOHw4HHtsKN2KSM3OPTdUY06eHM52H3sstBjLZMXFoS+i+fPh6qvhF7/YtWrHAw+E55+Hm28OF6lzc0NJ/+STUxZyg4pN1c2WLaGevTyxL1gQqmjatNlezz58eHhQQyaedolkurlzQz33QQeFvoD22y/dEVXv5ZdDM9FNm0Jvo6lOxm+9FZrnLlwY7qC+7bbMePrXblFHX1wcLpRkZYVmUcOHh+ReUNC0LyKJZJJ580J9/d57hwJVpnUbMGNGaCnUo0eoj+/bt2H2s2ULXHttuIax335wzz2hhiCdakv0sWlD0a1b+MP77LNwp+pVV4VOmpTkRVLnW98KVaKffw5DhoTujzPBli2hSegPfxgS7muvNVySh9A9xrXXwj//GdrhH3ccXHBB5RZwmSQ2iR7CwW7XLt1RiMTbYYfBCy+E4aOPDkk1ndasCcn9zjvhv/873OHasWPj7LugIDTH/slP4PbbYeBAeOWVxtl3fcQq0YtI4+jbN5w5d+gQkuy8eemJo6godEq2YEFoH3/DDY3/pK9WrcID4J95JjTTHjw4NEktf65vJlCiF5GdcsABIdn36BF6Ap07t3H3f//9ofooKytcgB03rnH3X9WwYeGu20mT4LrrQml/8eL0xlROiV5Edtq++4Zmh3l5oTnjAw80/D7LykKHa9/7XrjBsagoVJlkgvbtwx20jz4a7kbPzw8dqFXXH1RjUqIXkV3SqVNo1nzMMeGu0dtvb7h9rVsXui+45ZZw8fMf/4AuXRpufztr9OjQDHP0aLj00nAtY/ny9MWjRC8iu6xt2/A4wjFjQgKeNq36fpV2xeLFoYT84ouh1Pzb32Z2q7ouXUIvmA88AG+/Hc56/vd/U39ckqFELyIpkZ0dnlD13e+Gu0d/9rPUJbU//zlU02zZElr8fP/7qdluQzMLD5R/881wkfa888IZSXFx48ahRC8iKdO8Odx7b7hpafp0OPvsXauf3ro1tGA5/fRQIi4qgsMPT1m4jaZbN3jyyVCif+ml0IVCYWHjle6TSvRmNsrMlprZcjO7tJr53c1snpktNLPFZnZCND3HzDab2aLo9X+p/gAiklmaNQvVKr/4BfzhD6E1zM48i3XDhlAVdN114clP8+Y17b6pzOBHP4I33gjNUydODE87KylphJ3X1NtZ+QvIAt4DDgBaAm8AfaJQDzkAAApgSURBVKosMwP4UTTcB1gZDecAb9W1j8RXQ/VeKSKNb/r00OPjyJHuX36Z/HrvvOP+zW+6N28ees/ctq3hYkyHsjL3G25wb9nSfe+93R99dNe3SS29VyZToi8Alrv7++6+BZgNjKn6ewGU35PaHvh4Z394RCQ+LroolOqfegpGjgxdJ9Tlr38NbdDXrw83IZ17bvw6IszKCnfxFhWFs5QxY8IjDr/4omH2l0yi7wp8mDBeHE1LdDUw0cyKgceACxLm9YyqdJ43s6Oq24GZTTWzIjMrKmmU8xgRaSxnnRUeWvLaa6GvnDVrql9u2zb49a9D0uvVKyTBo49u3FgbW79+4bhcfjncd1/4vInPjk6VZBJ9db+lVS8hjAfudfduwAnA/WbWDFgNdHf3gcBFwB/NbIfeaNx9hrvnu3t+l0xsFCsiu+S000JJfelSOOooWLWq8vwvvwz11b/4BZx5ZmhC2b17emJtbC1bhuaoL78Mv/pVwzyuM5lNFgOJT0rsxo5VMz8A5gC4+7+AbKCzu//H3ddF0xcQ6vq/uatBi0jTM3JkqML59NPQdcHSpWH6e++FppOPPBKeUXv//aH/mN3NEUeEs5mGkEyinw/0MrOeZtYSGAdU7dViFXAsgJkdQkj0JWbWxcyyoukHAL2A91MVvIg0LYMHw3PPhVY4Rx0Vmhsedhh89FF4CPfFF8evPj4T1Jno3b0MOB94EngHmOPuS8zsGjMbHS12MXC2mb0BzAImR1eBjwYWR9MfBM5x988a4oOISNMwYEComsnODjcQde0aHvk3fHi6I4uv2DxhSkSaluLicJH2hz8Mj/yUXVPbE6Zi+3BwEcls3bqFqhppeOoCQUQk5pToRURiToleRCTmlOhFRGJOiV5EJOaU6EVEYk6JXkQk5pToRURiToleRCTmlOhFRGJOiV5EJOaU6EVEYk6JXkQk5pToRURiToleRCTmlOhFRGJOiV5EJOaU6EVEYk6JXkQk5pToRURiToleRCTmlOhFRGJOiV5EJOaU6EVEYk6JXkQk5pToRURiToleRCTmlOhFRGJOiV5EJOaU6EVEYk6JXkQk5pToRURiToleRCTmlOhFRGJOiV5EJOaU6EVEYk6JXkQk5pJK9GY2ysyWmtlyM7u0mvndzWyemS00s8VmdkLCvMui9Zaa2chUBi8iInVrXtcCZpYF3AEMB4qB+WY2193fTljsSmCOu//OzPoAjwE50fA4oC+wH/C0mX3T3bem+oOIiEj1kinRFwDL3f19d98CzAbGVFnGgXbRcHvg42h4DDDb3f/j7iuA5dH2RESkkSST6LsCHyaMF0fTEl0NTDSzYkJp/oJ6rIuZTTWzIjMrKikpSTJ0ERFJRjKJ3qqZ5lXGxwP3uns34ATgfjNrluS6uPsMd8939/wuXbokEZKIiCSrzjp6Qil8/4Txbmyvmin3A2AUgLv/y8yygc5JrisiIg0omRL9fKCXmfU0s5aEi6tzqyyzCjgWwMwOAbKBkmi5cWa2h5n1BHoBr6UqeBERqVudJXp3LzOz84EngSzgbndfYmbXAEXuPhe4GPi9mV1IqJqZ7O4OLDGzOcDbQBlwnlrciIg0Lgv5OHPk5+d7UVFRusMQEWlSzGyBu+dXN093xoqIxJwSvYhIzCnRi4jEnBK9iEjMKdGLiMScEr2ISMwp0YuIxJwSvYhIzCnRi4jEnBK9iEjMKdGLiMScEr2ISMwp0YuIxJwSvYhIzCnRi4jEnBK9iEjMKdGLiMScEr2ISMwp0YuIxJwSvYhIzCnRi4jEnBK9iEjMKdGLiMScEr2ISMwp0YuIxJwSvYhIzCnRi4jEnBK9iEjMKdGLiMScEr2ISMwp0YuIxJwSvYhIzCnRi4jEnBK9iEjMKdGLiMScEr2ISMzFJtEXFkJODjRrFt4LC9MdkYhIZmie7gBSobAQpk6F0tIw/sEHYRxgwoT0xSUikgmSKtGb2SgzW2pmy83s0mrm32Jmi6LXu2b2ecK8rQnz5qYy+HJXXLE9yZcrLQ3TRUR2d3WW6M0sC7gDGA4UA/PNbK67v12+jLtfmLD8BcDAhE1sdvcBqQt5R6tW1W+6iMjuJJkSfQGw3N3fd/ctwGxgTC3LjwdmpSK4ZHXvXr/pIiK7k2QSfVfgw4Tx4mjaDsysB9ATeDZhcraZFZnZK2Z2cg3rTY2WKSopKUky9O2mTYNWrSpPa9UqTBcR2d0lk+itmmlew7LjgAfdfWvCtO7ung+cCdxqZgfusDH3Ge6e7+75Xbp0SSKkyiZMgBkzoEcPMAvvM2boQqyICCTX6qYY2D9hvBvwcQ3LjgPOS5zg7h9H7++b2XOE+vv36h1pHSZMUGIXEalOMiX6+UAvM+tpZi0JyXyH1jNm1hvoCPwrYVpHM9sjGu4MDAberrquiIg0nDpL9O5eZmbnA08CWcDd7r7EzK4Bity9POmPB2a7e2K1ziHAnWa2jfCjckNiax0REWl4Vjkvp19+fr4XFRWlOwwRkSbFzBZE10N3EJsuEEREpHpK9CIiMZdxVTdmVgJ8kO44dlFnYG26g8ggOh6V6Xhsp2NR2a4cjx7uXm379IxL9HFgZkU11ZXtjnQ8KtPx2E7HorKGOh6quhERiTklehGRmFOibxgz0h1AhtHxqEzHYzsdi8oa5Hiojl5EJOZUohcRiTklehGRmFOiTyEz29/M5pnZO2a2xMx+ku6Y0s3MssxsoZn9Ld2xpJuZdTCzB83s39HfyJHpjimdzOzC6P/kLTObZWbZ6Y6pMZnZ3Wb2qZm9lTBtLzN7ysyWRe8dU7EvJfrUKgMudvdDgCOA88ysT5pjSrefAO+kO4gMcRvwhLsfDOSxGx8XM+sK/BjId/dcQoeJ49IbVaO7FxhVZdqlwDPu3gt4JhrfZUr0KeTuq9399Wh4I+Efudqnce0OzKwb8G3grnTHkm5m1g44GvgDgLtvcffP0xtV2jUH9jSz5kAran7ORSy5+wvAZ1UmjwHui4bvA6p9Kl99KdE3EDPLITxk5dX0RpJWtwI/B7alO5AMcABQAtwTVWXdZWat0x1Uurj7R8BNwCpgNbDB3f+R3qgywj7uvhpCwRHYOxUbVaJvAGbWBngI+Km7f5HueNLBzE4EPnX3BemOJUM0BwYBv3P3gcAmUnRa3hRFdc9jCM+Y3g9obWYT0xtVfCnRp5iZtSAk+UJ3/0u640mjwcBoM1sJzAaGmdkD6Q0prYqBYncvP8N7kJD4d1fHASvcvcTdvwb+AvxXmmPKBGvMbF+A6P3TVGxUiT6FzMwIdbDvuPvN6Y4nndz9Mnfv5u45hItsz7r7bltic/dPgA+jR24CHMvu/VjNVcARZtYq+r85lt344nSCucCkaHgS8GgqNprMw8EleYOB7wJvmtmiaNrl7v5YGmOSzHEBUBg9e/l94Ptpjidt3P1VM3sQeJ3QWm0hu1l3CGY2CxgKdDazYuAq4AZgjpn9gPBj+J2U7EtdIIiIxJuqbkREYk6JXkQk5pToRURiToleRCTmlOhFRGJOiV5EJOaU6EVEYu7/A++BXr9o4JgcAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "acc = history.history['acc']\n",
    "val_acc = history.history['val_acc']\n",
    "loss = history.history['loss']\n",
    "val_loss = history.history['val_loss']\n",
    "epochs = range(1, len(acc) + 1)\n",
    "plt.plot(epochs, acc, 'bo', label='Training acc')\n",
    "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n",
    "plt.title('Training and validation accuracy')\n",
    "plt.legend()\n",
    "plt.figure()\n",
    "plt.plot(epochs, loss, 'bo', label='Training loss')\n",
    "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
    "plt.title('Training and validation loss')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " Here LSTM perform much better than the SimpleRNN network\n",
    "\n",
    "# Wrapping up\n",
    "\n",
    "Now you understand the following:\n",
    "\n",
    " What RNNs are and how they work\n",
    "\n",
    " What LSTM is, and why it works better on long sequences than a naive RNN\n",
    "\n",
    " How to use Keras RNN layers to process sequence data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Using the GRU layer in Keras\n",
    "In book example we talked about GRU (Gated Recurrent Unit) but didn't use it so lets try it on our own."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 20000 samples, validate on 5000 samples\n",
      "Epoch 1/10\n",
      "20000/20000 [==============================] - 10s 495us/sample - loss: 0.5574 - acc: 0.7202 - val_loss: 0.4369 - val_acc: 0.8000\n",
      "Epoch 2/10\n",
      "20000/20000 [==============================] - 8s 379us/sample - loss: 0.3127 - acc: 0.8722 - val_loss: 0.3457 - val_acc: 0.8514\n",
      "Epoch 3/10\n",
      "20000/20000 [==============================] - 8s 379us/sample - loss: 0.2575 - acc: 0.9000 - val_loss: 0.3181 - val_acc: 0.8628\n",
      "Epoch 4/10\n",
      "20000/20000 [==============================] - 8s 381us/sample - loss: 0.2228 - acc: 0.9139 - val_loss: 0.3442 - val_acc: 0.8584\n",
      "Epoch 5/10\n",
      "20000/20000 [==============================] - 8s 381us/sample - loss: 0.1933 - acc: 0.9287 - val_loss: 0.3461 - val_acc: 0.8692\n",
      "Epoch 6/10\n",
      "20000/20000 [==============================] - 8s 380us/sample - loss: 0.1822 - acc: 0.9346 - val_loss: 0.3363 - val_acc: 0.8638\n",
      "Epoch 7/10\n",
      "20000/20000 [==============================] - 8s 378us/sample - loss: 0.1668 - acc: 0.9418 - val_loss: 0.3905 - val_acc: 0.8680\n",
      "Epoch 8/10\n",
      "20000/20000 [==============================] - 8s 378us/sample - loss: 0.1509 - acc: 0.9467 - val_loss: 0.4636 - val_acc: 0.8528\n",
      "Epoch 9/10\n",
      "20000/20000 [==============================] - 8s 378us/sample - loss: 0.1422 - acc: 0.9481 - val_loss: 0.3394 - val_acc: 0.8750\n",
      "Epoch 10/10\n",
      "20000/20000 [==============================] - 8s 379us/sample - loss: 0.1307 - acc: 0.9544 - val_loss: 0.5764 - val_acc: 0.8454\n"
     ]
    }
   ],
   "source": [
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import Embedding  #, SimpleRNN\n",
    "from tensorflow.keras.layers import Dense\n",
    "#from tensorflow.keras.layers import LSTM\n",
    "from tensorflow.keras.layers import GRU\n",
    "\n",
    "\n",
    "model = Sequential()\n",
    "model.add(Embedding(max_features, 32))\n",
    "model.add(GRU(32))\n",
    "model.add(Dense(1, activation='sigmoid'))\n",
    "\n",
    "model.compile(optimizer='rmsprop',\n",
    "                loss='binary_crossentropy',\n",
    "                metrics=['acc'])\n",
    "\n",
    "history = model.fit(input_train, y_train,\n",
    "                    epochs=10,\n",
    "                    batch_size=128,\n",
    "                    validation_split=0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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AuR7BXk1pXb07v4C8EKZYf+b9HkSMKmc+d4CuqZ+2JGqfPvtt/Tp04fNmzfj7jz44IPUr19rerKQiNXE7fZVGTWqdAxQc9WryYq3N5333GQq8xQu7tWk3NxcL/sowQ8//JADDzwwoohkR+hvldmys8u/OadDh9Dao6ak+6ZGATOb5aHhy3ZUFBSpQzKlfvycc5TYa5L6uhGpQ+rUBUgpoUQvUodE2fxYoqNEL1JDMuFu0CibH0t0lOhTcMwxx2x389OYMWP41a9+Vel8zZo1A2DZsmWcfvrpFS677MXnssaMGUNRUhOFk046ia+//jqV0CVDZMrdoFD9t9tL5lGiT8GQIUOYMGFCqWETJkxgyJAhKc2/9957M2nSdq1PU1Y20b/wwgvstttuO708qXmZcjeo1E1K9Ck4/fTTef755/nuu+8AWLx4McuWLaN3794l7dpzcnLo2rUr//rXv7abf/HixXTp0gUI3RMMHjyYbt26cdZZZ5V0OwBwySWXlHRxfNNNNwFwzz33sGzZMo499liOPfZYALKzs1m1ahUAd911F126dKFLly4lXRwvXryYAw88kIsuuojOnTtzwgknlFpPseeee45DDjmEnj170rdvX1asWAGEtvpDhw6la9eudOvWraQLhRdffJGcnBy6d+9Onz590rJv64pMae0idVOta1555ZVQTvfrP0iPHpDIkeVq1aoVvXr14sUXX2TgwIFMmDCBs846CzOjcePGPP300+y6666sWrWKQw89lAEDBlTYSdj9999PVlYWc+fOZe7cueTk5JSMGzVqFLvvvjtbtmyhT58+zJ07l1//+tfcddddTJs2jdatW5da1qxZsxg3bhzvvPMO7s4hhxzC0UcfTcuWLVm4cCHjx4/noYce4swzz+TJJ5/k3HPPLTV/7969mTFjBmbGww8/zO23386dd97JLbfcQosWLXj//fC8mDVr1lBYWMhFF13E9OnT6dixo/rD2UE18XAJkYqoRJ+i5Oqb5Gobd+f666+nW7du9O3bl6VLl5aUjMszffr0koTbrVs3unXrVjJu4sSJ5OTk0LNnT+bNm1duh2XJ3njjDU477TSaNm1Ks2bNGDRoEK+//joAHTt2pEePHkDFXSEXFBRw4okn0rVrV+644w7mzZsHwJQpU0o97aply5bMmDGDo446io4dOwK1qyvjTLgIqtYu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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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AQMwM2rVqsX06dNZuHAhs2fP5s477yy1gNYTTzxBnTp1yM3NZfTo0cXmlI8bN46cnBxyc3N57733yM3N5bbbbuPkk09m9uzZzJ49u9ixFixYwJQpU5g/fz4ffPABTz31FIsWLQJ8obDhw4ezZMkSGjRoQFZWVqk/49VXX839999Pbm4ubdq04Z577gF8OeBFixaRm5t7oETwhAkTePzxx1m8eDFz584t9YNCJJxEmD5ZmfryE7aFXlpLOpYKu1369OlDZmbmgVaxc45Ro0YxZ84cqlSpwrfffsu6des48cQTwx5nzpw53HbbbQC0bduWtm3bHnjthRdeYNKkSRQUFLB27VqWLl1a7PWS3n//fS6//PIDFR/79evH3Llz6d27N82bN6ddu3ZA6SV6wddn37RpE126dAHgmmuu4corrzwQ4+DBg+nbty99+/YF4LzzzuOOO+5g8ODB9OvXjyZNmkTyFooklMp0Jym10Evo27cvs2bNYuHChezcufPAjSUyMjLIz89nwYIFLF68mBNOOCFsydyizOyQbV999RUTJkxg1qxZ5Obmcumllx7xOKVdCRSW3oXSS/QeyWuvvcbw4cNZsGABZ599NgUFBYwcOZKnn36anTt30qlTJz7//PNyHVskSInSlw+xH5xVQi+hbt26dO3alV/+8pfFBkM3b97M8ccfT/Xq1Zk9ezarw33kF3HBBRccuBH0p59+Sm5uLuBL7x511FHUr1+fdevW8cYbbxz4nnr16rF169awx3rppZfYsWMH27dvZ/r06Zx//vll/tnq16/PMcccw9y5cwGYOnUqXbp0Yf/+/XzzzTd069aNBx54gE2bNrFt2za+/PJL2rRpw1133UV6eroSuiSlIEttFxWPwdmE7XIJ0qBBg+jXr1+xGS+DBw+mV69epKen065dO84888xSj3HTTTdx3XXX0bZtW9q1a0fHjh0Bf/eh9u3b06pVq0NK7w4bNoyePXty0kknFetH79ChA9dee+2BY9xwww20b9++1O6Vw3nmmWcODIqeeuqpTJkyhX379jFkyBA2b96Mc47f/OY3NGjQgD/84Q/Mnj2bqlWr0rJlywN3XxJJNkGV2i4qHoOzKp8rFaLfmUhkqlTxLfOSzPygcaRKK5+rLhcRkTiIx0IrJXQRkTiIx+BswiX0oLqApOz0uxKJXDwGZxNqULRWrVps2LCBhg0bhp3yJ4nDOceGDRuoVatW0KGIJI1YD84mVEJv0qQJeXl55OfnBx2KRKBWrVpabCSSQBIqoVevXp3mzZsHHYaISFJKuD50EREpHyV0EZEUoYQuIpIiAlspamb5QOkFURJfI+D7oINIIHo/DtJ7UZzej+Iq8n40c84dF+6FwBJ6KjCznMMtwa2M9H4cpPeiOL0fxcXq/VCXi4hIilBCFxFJEUroFTMp6AASjN6Pg/ReFKf3o7iYvB/qQxcRSRFqoYuIpAgldBGRFKGEXg5mdoqZzTazz8xsiZmNCDqmoJlZVTNbZGavBh1L0MysgZm9aGafh/6PnBt0TEEys9+E/k4+NbPnzKzSlOg0s8lmtt7MPi2y7Vgze9vMVoS+HhOt8ymhl08BcKdzrgXQCRhuZi0DjiloI4DPgg4iQTwKvOmcOxM4i0r8vphZY+A2IN051xqoCgwMNqq4+ifQo8S2kcAs59yPgFmh51GhhF4Ozrm1zrmFocdb8X+wjYONKjhm1gS4FHg66FiCZmZHAxcA/wBwzu1xzm0KNqrAVQNqm1k1oA6wJuB44sY5Nwf4ocTmPsAzocfPAH2jdT4l9AoyszSgPTA/2EgC9Qjwe6AMt7pNWacC+cCUUBfU02Z2VNBBBcU59y0wAfgaWAtsds69FWxUgTvBObcWfOMQOD5aB1ZCrwAzqwtkAbc757YEHU8QzOwyYL1zbkHQsSSIakAH4AnnXHtgO1G8pE42of7hPkBz4GTgKDMbEmxUqUsJvZzMrDo+mWc457KDjidA5wG9zWwVkAlcaGbTgg0pUHlAnnOu8IrtRXyCr6y6A1855/Kdc3uBbOCnAccUtHVmdhJA6Ov6aB1YCb0czN/w9B/AZ865h4KOJ0jOuf9xzjVxzqXhB7vecc5V2haYc+474BszOyO06SJgaYAhBe1roJOZ1Qn93VxEJR4kDpkBXBN6fA3wcrQOnFC3oEsi5wFDgU/MbHFo2yjn3OsBxiSJ41Ygw8xqACuB6wKOJzDOuflm9iKwED87bBGVqAyAmT0HdAUamVke8CdgPPCCmV2P/8C7Mmrn09J/EZHUoC4XEZEUoYQuIpIilNBFRFKEErqISIpQQhcRSRFK6CIiKUIJXUQkRfw/VHkB6b2fgsoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "acc = history.history['acc']\n",
    "val_acc = history.history['val_acc']\n",
    "loss = history.history['loss']\n",
    "val_loss = history.history['val_loss']\n",
    "epochs = range(1, len(acc) + 1)\n",
    "plt.plot(epochs, acc, 'bo', label='Training acc')\n",
    "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n",
    "plt.title('Training and validation accuracy')\n",
    "plt.legend()\n",
    "plt.figure()\n",
    "plt.plot(epochs, loss, 'bo', label='Training loss')\n",
    "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
    "plt.title('Training and validation loss')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here above GRU performed slightly less than LSTM but better than RNN\n",
    "\n",
    "# Information found on Stackoverflow\n",
    "\n",
    "GRU is related to LSTM as both are utilizing different way if gating information to prevent vanishing gradient problem. Here are some pin-points about GRU vs LSTM-\n",
    "\n",
    "The GRU controls the flow of information like the LSTM unit, but without having to use a memory unit. It just exposes the full hidden content without any control.\n",
    "\n",
    "GRU is relatively new, and from my perspective, the performance is on par with LSTM, but computationally more efficient (less complex structure as pointed out). So we are seeing it being used more and more.\n",
    "\n",
    "# To complement already great answers above.\n",
    "\n",
    "From my experience, GRUs train faster and perform better than LSTMs on less training data if you are doing language modeling (not sure about other tasks).\n",
    "\n",
    "GRUs are simpler and thus easier to modify, for example adding new gates in case of additional input to the network. It's just less code in general.\n",
    "\n",
    "LSTMs should in theory remember longer sequences than GRUs and outperform them in tasks requiring modeling long-distance relations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "conda_gpu",
   "language": "python",
   "name": "conda_gpu"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
